// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.statement.SQLCreateStatement;
// import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../MySqlObjectImpl.h"
#include "MySqlStatementImpl.h"
#include "../../../../ast/statement/SQLCreateStatement.h"

class MySqlCreateUserStatement_UserSpecification : virtual public MySqlObjectImpl
{
public:
  SQLExpr_ptr user;
  BOOL_ptr passwordHash;
  SQLExpr_ptr password;
  SQLExpr_ptr authPlugin;
  BOOL_ptr pluginAs;

  SHAREDOBJECT(MySqlCreateUserStatement_UserSpecification);
  SQLExpr_ptr getUser();

  void setUser(SQLExpr_ptr user);

  BOOL_ptr isPasswordHash();

  void setPasswordHash(BOOL_ptr passwordHash);

  SQLExpr_ptr getPassword();

  void setPassword(SQLExpr_ptr password);

  SQLExpr_ptr getAuthPlugin();

  void setAuthPlugin(SQLExpr_ptr authPlugin);

  BOOL_ptr isPluginAs();

  void setPluginAs(BOOL_ptr pluginAs);

  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);
};

class MySqlCreateUserStatement : virtual public MySqlStatementImpl, virtual public SQLCreateStatement
{
public:
  MySqlCreateUserStatement_UserSpecification_list_ptr users;

  BOOL_ptr ifNotExists;
  MySqlCreateUserStatement();
  SHAREDOBJECT(MySqlCreateUserStatement);
  MySqlCreateUserStatement_UserSpecification_list_ptr getUsers();

  BOOL_ptr isIfNotExists();

  void setIfNotExists(BOOL_ptr ifNotExists);

  void addUser(MySqlCreateUserStatement_UserSpecification_ptr user);

  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);
};
